home *** CD-ROM | disk | FTP | other *** search
/ Deutsche Edition 1 / Deutsche Edition 1.iso / amok / amok_lha / amok26.lha / ConvTabs / TabConversions.asm < prev    next >
Assembly Source File  |  1993-08-15  |  3KB  |  135 lines

  1. ;(*---------------------------------------------------------------------------
  2. ;    :Program.     TabConversions.asm
  3. ;    :Contents.      Replace spaces with tabs and delete trailing blanks.
  4. ;    :Author.      Bernd Preusing
  5. ;    :Address.      Gerhardstr. 16  D-2200 Elmshorn
  6. ;    :Phone.      04121/22486
  7. ;    :Copyright.      Public Domain
  8. ;    :Language.      68000 Assembler
  9. ;    :Translator.  DevPac 2.0
  10. ;    :History.      V1.0 26-Aug-89 Bernd Preusing
  11. ;    :Bugs.      Strings go across lines. This will not be corrected!
  12. ;    :Remark.      DEF-Module is TabConversions.def
  13. ;---------------------------------------------------------------------------*)
  14. ;
  15.     IDNT    TabConversions
  16.     SECTION    CODE,CODE
  17.     XDEF    TabConversions
  18.     XDEF    SpacesToTabs
  19.  
  20. ; Column    EQUR    D0
  21. ; Spaces    EQUR    D1
  22. ; TermQuote    EQUR    D2
  23. ; nt        EQUR    D3
  24. ; npos        EQUR    D4
  25. ; ch        EQUR    D5
  26. ; space        EQUR    D6 ; const
  27. ; tab        EQUR    D7 ; const
  28. ; src        EQUR    A0
  29. ; dst        EQUR    A1
  30. ; OldDst    EQUR    A2
  31. ;
  32.  
  33. ; In der M2Amiga-Umgebung ist die Rettung der hier benutzten Register Unsinn!
  34.  
  35. SpacesToTabs:
  36.     MOVE.L    A1,A2        ; OldDst:=dst
  37.     MOVEQ    #0,D0        ; Column:=0
  38.     MOVEQ    #0,D1        ; Spaces:=0
  39.     MOVEQ    #' ',D6        ; D6=space-konstante
  40.     MOVEQ    #9,D7        ; D7=tab-konstante
  41.  
  42. L000001:            ; repeat
  43.     MOVE.B    (A0)+,D5    ; ch:=src^; inc(src)
  44.     CMP.B    D6,D5        ; if ch=' ' then
  45.     BNE.S    L000002
  46.     ADDQ.W    #1,D1        ; inc(Spaces)
  47.     BRA.S    L000014
  48. L000002:
  49.     CMP.B    D7,D5        ; elsif    ch=ht
  50.     BNE.S    L000003
  51.     ADD.W    D0,D1        ; Spaces:=(Column+Spaces)or 7 +1-Column
  52.     ORI.W    #$0007,D1
  53.     ADDQ.W    #1,D1
  54.     SUB.W    D0,D1
  55.     BRA.S    L000014
  56. L000003:
  57.     CMPI.B    #$0A,D5        ; if ch=eol or ch=cr then
  58.     BEQ.S    L000004
  59.     CMPI.B    #$0D,D5
  60.     BNE.S    L000005
  61. L000004:
  62.     MOVEQ    #-1,D0        ; Column:=-1
  63.     MOVEQ    #0,D1        ; Spaces:=0
  64.     BRA.S    L000013
  65. L000005:
  66.     TST.W    D1        ; while    Spaces>0 do
  67.     BLE.S    L000009
  68.     MOVE.W    D0,D3
  69.     ORI.W    #$0007,D3
  70.     ADDQ.W    #1,D3        ; nt:=col or 7 +1
  71.     MOVE.W    D0,D4
  72.     ADD.W    D1,D4        ; npos:=Column+Spaces
  73.     CMP.W    D4,D3
  74.     BLE.S    L000007        ; if nt>npos then
  75. L000006:            ; repeat
  76.     MOVE.B    D6,(A1)+    ; dst^:=' '; inc(dst)
  77.     ADDQ.W    #1,D0        ; inc(Column)
  78.     CMP.W    D0,D4
  79.     BNE.S    L000006        ; until    Column=npos
  80.     MOVEQ    #0,D1        ; Spaces:=0
  81.     BRA.S    L000008        ; else
  82. L000007:
  83.     MOVE.B    D7,(A1)+    ; dst^:=ht; inc(dst)
  84.     SUB.W    D3,D1
  85.     ADD.W    D0,D1        ; dec(Spaces,nt-Column)
  86.     MOVE.W    D3,D0        ; Column:=nt
  87. L000008:
  88.     BRA.S    L000005        ; end while putSpaces
  89.  
  90. L000009:
  91.     CMPI.B    #$22,D5        ; if ch="'" or ch='"' then
  92.     BEQ.S    L000010
  93.     CMPI.B    #$27,D5
  94.     BNE.S    L000013
  95. L000010:
  96.     MOVE.B    D5,D2        ; TermQuote:=ch
  97. L000011:            ; repeat
  98.     MOVE.B    D5,(A1)+    ; dst^:=ch; inc(dst)
  99.     CMP.B    D7,D5        ; if ch=ht then
  100.     BNE.S    L000012
  101.     ORI.W    #$0007,D0    ; col:=col or 7
  102. L000012:            ; end
  103.     ADDQ.W    #1,D0        ; inc(Column)
  104.     MOVE.B    (A0)+,D5    ; ch:=src^;inc(src)
  105.     BEQ.S    L000013        ; until    ch=0 or    ch=TermQuote
  106.     CMP.B    D2,D5
  107.     BNE.S    L000011
  108. L000013:
  109.     ADDQ.W    #1,D0        ; inc(Column)
  110.     MOVE.B    D5,(A1)+    ; dst^:=ch; inc(dst)
  111. L000014:
  112.     BNE.S    L000001        ; until    ch=nul
  113.  
  114.     SUBQ.L    #2,A1        ; dec(dst,2) vor    nul
  115. L000015:            ; das geht sicher noch schneller v !!!
  116.     CMPA.L    A2,A1
  117.     BLT.S    L000017
  118.     CMP.B    (A1),D6        ; ch=' ' ?
  119.     BEQ.S    L000016
  120.     CMP.B    (A1),D7        ; ch=ht?
  121.     BNE.S    L000017
  122. L000016:
  123.     CLR.B    (A1)        ; dst^:=nul
  124.     SUBQ.L    #1,A1        ; dec(dst)
  125.     BRA.S    L000015
  126. L000017:
  127.     MOVE.L    A1,D0        ; return dst+1-OldDst
  128.     ADDQ.L    #1,D0
  129.     SUB.L    A2,D0
  130.  
  131. TabConversions: ; in Zukunft:'TabConversionsInit:'
  132.     RTS
  133.  
  134.     END
  135.